BuildContext パラメーターを TextEditingController.buildTextSpan に追加しました
まとめ
あBuildContext
パラメータが追加されましたTextEditingController.buildTextSpan
。
拡張または実装するクラスTextEditingController
そしてオーバーライドbuildTextSpan
を追加する必要がありますBuildContext
パラメーターを署名に追加して有効なオーバーライドにします。
の発信者TextEditingController.buildTextSpan
を渡す必要がありますBuildContext
電話に。
コンテクスト
TextEditingController.buildTextSpan
によって呼ばれていますEditableText
コントローラー上でTextSpan
それがレンダリングすること。buildTextSpan
を拡張するカスタム クラスでオーバーライドできます。TextEditingController
。これによりクラスの拡張が可能になりますTextEditingController
オーバーライドbuildTextSpan
変える
テキストの一部のスタイル (リッチ テキスト編集など)。
必要な状態buildTextSpan
(以外のTextStyle
とwithComposing
引数)
拡張するクラスに渡す必要がありましたTextEditingController
。
変更内容の説明
とともにBuildContext
利用可能、ユーザーはアクセスできるInheritedWidgets
中身buildTextSpan
テキストのスタイルを設定するために必要な状態を取得するには、
または作成されたものを操作するTextSpan
。
例を考えてみましょう。HighlightTextEditingController
したいのは
テキストの色を次のように設定して強調表示します。Theme.accentColor
。
この変更が行われる前は、コントローラーの実装は次のようになります。
class HighlightTextEditingController extends TextEditingController {
HighlightTextEditingController(this.highlightColor);
final Color highlightColor;
@override
TextSpan buildTextSpan({TextStyle? style, required bool withComposing}) {
return super.buildTextSpan(style: TextStyle(color: highlightColor), withComposing: withComposing);
}
そして、コントローラーのユーザーは色を渡す必要があります コントローラーを作成するとき。
とともにBuildContext
利用可能なパラメータ、
のHighlightTextEditingController
直接アクセスできるTheme.accentColor
使用してTheme.of(BuildContext)
:
class HighlightTextEditingController extends TextEditingController {
@override
TextSpan buildTextSpan({required BuildContext context, TextStyle? style, required bool withComposing}) {
final Color color = Theme.of(context).accentColor;
return super.buildTextSpan(context: context, style: TextStyle(color: color), withComposing: withComposing);
}
}
移行ガイド
TextEditingController.buildTextSpan
オーバーライド追加required BuildContext context
パラメータへの
の署名buildTextSpan
オーバーライド。
移行前のコード:
class MyTextEditingController {
@override
TextSpan buildTextSpan({TextStyle? style, required bool withComposing}) {
/* ... */
}
}
移行前のエラー メッセージの例:
'MyTextEditingController.buildTextSpan' ('TextSpan Function({TextStyle? style, required bool withComposing})') isn't a valid override of 'TextEditingController.buildTextSpan' ('TextSpan Function({required BuildContext context, TextStyle? style, required bool withComposing})').
移行後のコード:
class MyTextEditingController {
@override
TextSpan buildTextSpan({required BuildContext context, TextStyle? style, required bool withComposing}) {
/* ... */
}
}
TextEditingController.buildTextSpan
電話をかける型の名前付きパラメータ「context」を渡しますBuildContext
電話に。
移行前のコード:
TextEditingController controller = /* ... */;
TextSpan span = controller.buildTextSpan(withComposing: false);
移行前のエラー メッセージ:
The named parameter 'context' is required, but there's no corresponding argument.
Try adding the required argument.
移行後のコード:
BuildContext context = /* ... */;
TextEditingController controller = /* ... */;
TextSpan span = controller.buildTextSpan(context: context, withComposing: false);
タイムライン
リリースされたバージョン: 1.26.0
安定版リリース: 2.0.0
参考文献
API ドキュメント:
TextEditingController.buildTextSpan
関連する問題:
- 問題 #72343
関連する PR:
- リランド「BuildContext パラメーターを TextEditingController.buildTextSpan に追加」 #73510
- 「BuildContext パラメーターを TextEditingController.buildTextSpan に追加」を元に戻す #73503
- BuildContext パラメーターを TextEditingController.buildTextSpan に追加します #72344